/*
 *  base_list.h
 *  mongoose
 *
 *  Created by xl on 11-5-2.
 *  Copyright 2011 Justin Lee. All rights reserved.
 *
 */

#ifndef __BASE_LIST_H__
#define __BASE_LIST_H__

#ifndef base_bool
typedef char base_bool;
#endif

#ifndef base_true
#define base_true 1
#endif

#ifndef base_false
#define base_false 0
#endif

#ifndef NULL
#define NULL 0
#endif

typedef void* BASE_LIST_CONTENT;

typedef struct tagBASE_LIST
{
	BASE_LIST_CONTENT content;
	struct tagBASE_LIST* next;
} BASE_LIST;

typedef base_bool (*BASE_LIST_COMPARE_FUNC)(BASE_LIST_CONTENT content, void* param);
typedef void (*BASE_LIST_REMOVE_NODE)(BASE_LIST_CONTENT content, void* param);

BASE_LIST* base_list_create();
void base_list_append(BASE_LIST* list, BASE_LIST_CONTENT content);
void base_list_remove(BASE_LIST* list, BASE_LIST_CONTENT content);
void base_list_destory(BASE_LIST* list, BASE_LIST_REMOVE_NODE node_remove_handler, void* param);
BASE_LIST_CONTENT base_list_conditon_find(BASE_LIST *list, BASE_LIST_COMPARE_FUNC compare, void* param);

#endif /*END OF #ifndef __BASE_LIST_H__*/